package com.zg.invoice.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

@Data
@ApiModel(value = "开票回调入参", description = "开票回调信息对象")
public class InvoiceCallBack {
    private static final long serialVersionUID=1L;

    /**
     *订单编号
     */
    @ApiModelProperty(value = "订单编号")
    private String orderNo;

    /**
     *发票流水号
     */
    @ApiModelProperty(value = "发票流水号")
    private String invoiceId;

    /**
     * 创建日期
     */
    @ApiModelProperty(value = "创建日期")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", shape = JsonFormat.Shape.STRING, timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    /**
     * 开票日期
     */
    @ApiModelProperty(value = "开票日期")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", shape = JsonFormat.Shape.STRING, timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date invoiceTime;

    /**
     * 更新时间
     */
    @ApiModelProperty(value = "更新时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", shape = JsonFormat.Shape.STRING, timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;

    /**
     *订单日期 2022-05-12
     */
    @ApiModelProperty(value = "orderDate")
    private String orderDate;

    /**
     *发货日期 2022-05-12
     */
    @ApiModelProperty(value = "deliverDate")
    private String deliverDate;

    /**
     * 作废日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", shape = JsonFormat.Shape.STRING, timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "invalidTime")
    private Date invalidTime;

    /**
     *开票方式,0:api接口 1:手工开票 2:批量导入 5:本地提取
     */
    @ApiModelProperty(value = "开票方式")
    private Integer requestSrc;

    /**
     *发票代码，仅开票成功会返回
     */
    @ApiModelProperty(value = "发票代码")
    private String invoiceCode;

    /**
     *发票号码，仅开票成功会返回
     */
    @ApiModelProperty(value = "发票号码")
    private String invoiceNumber;

    /**
     *全电发票号码，仅全电发票（电票+纸票）开票成功会返回
     */
    @ApiModelProperty(value = "全电发票号码")
    private String allElectronicInvoiceNumber;

    /**
     *发票类型：红字发票、蓝字发票
     */
    @ApiModelProperty(value = "发票类型")
    private Integer invoiceType;

    /**
     *销方税号
     */
    @ApiModelProperty(value = "销方税号")
    private String sellerTaxnum;



    /**
     *True:开票成功；false：开票失败
     */
    @ApiModelProperty(value = "是否开票成功")
    private Boolean successFlag;

    /**
     *发票处理结果:   1:开票成功、 2:开票失败、3:作废成功、4:作废失败；5:开票失败删除成功。
     * 结果处于开票成功、 开票失败、作废成功、作废失败，开票失败删除成功触发回传
     */
    @ApiModelProperty(value = "发票处理结果")
    private Integer invoiceStatus;

    /**
     *开票异常信息
     */
    @ApiModelProperty(value = "开票异常信息")
    private String errorMessage;

    /**
     *发票pdf地址，仅开票成功且版式文件为pdf时返回
     */
    @ApiModelProperty(value = "发票pdf地址")
    private String pdfUrl;


    /**
     *发票jpg地址，清单票发票主信息与清单信息以”,”隔开，仅开票成功会返回
     */
    @ApiModelProperty(value = "发票jpg地址")
    private String imageUrl;

    /**
     *纸票pdf地址（含底图）
     */
    @ApiModelProperty(value = "纸票pdf地址")
    private String paperPdfUrl;

    /**
     *发票ofd地址，仅开票成功且版式文件为ofd时返回
     */
    @ApiModelProperty(value = "发票ofd地址")
    private String ofdUrl;

    /**
     * 开票员id
     */
    @ApiModelProperty(value = "开票员id")
    private String userId;
    /**
     * 交付邮箱
     */
    @ApiModelProperty(value = "交付邮箱")
    private String notifyEmail;

    /**
     * 交付手机
     */
    @ApiModelProperty(value = "交付手机")
    private String notifyPhone;

    /**
     * 购方电话
     */
    @ApiModelProperty(value = "购方电话")
    private String buyerPhone;

    /**
     * 购方地址
     */
    @ApiModelProperty(value = "购方地址")
    private String buyerAddress;

    /**
     * 购方银行开户行
     */
    @ApiModelProperty(value = "购方银行开户行")
    private String buyerBank;

    /**
     * 购方银行账号
     */
    @ApiModelProperty(value = "购方银行账号")
    private String buyerAccount;

    /**
     * 校验码
     */
    @ApiModelProperty(value = "校验码")
    private String checkCode;

    /**
     * 二维码
     */
    @ApiModelProperty(value = "二维码")
    private String qrCode;

    /**
     * 发票密文
     */
    @ApiModelProperty(value = "发票密文")
    private String invoiceCipher;



    /**
     *红票对应的蓝票发票代码
     */
    @ApiModelProperty(value = "红票对应的蓝票发票代码")
    private String oriInvoiceCode;

    /**
     *红票对应的蓝票发票号码
     */
    @ApiModelProperty(value = "红票对应的蓝票发票号码")
    private String oriInvoiceNumber;

    /**
     *红票对应的蓝票全电发票号码
     */
    @ApiModelProperty(value = "红票对应的蓝票全电发票号码")
    private String oldEleInvoiceNumber;

    /**
     *红字申请流水号，仅红字专票返回
     */
    @ApiModelProperty(value = "红字申请流水号")
    private String billNo;

    /**
     *红字申请表编号，仅红字专票返回
     */
    @ApiModelProperty(value = "红字申请表编号")
    private String billInfoNo;

    /**
     *不含税金额，仅开票成功会返回
     */
    @ApiModelProperty(value = "不含税金额")
    private BigDecimal taxFreeAmountTotal;

    /**
     *税额，仅开票成功会返回
     */
    @ApiModelProperty(value = "税额")
    private BigDecimal taxTotal;

    /**
     *含税金额，仅开票成功会返回
     */
    @ApiModelProperty(value = "含税金额")
    private BigDecimal taxAmountTotal;

    /**
     *购方名称，仅开票成功会返回
     */
    @ApiModelProperty(value = "购方名称")
    private String buyerName;

    /**
     *购方税号，仅开票成功会返回
     */
    @ApiModelProperty(value = "购方税号")
    private String buyerTaxnum;

    /**
     *销方名称，仅开票成功会返回
     */
    @ApiModelProperty(value = "销方名称")
    private String sellerName;

    /**
     *销方电话
     */
    @ApiModelProperty(value = "销方电话")
    private String sellerPhone;

    /**
     *销方地址
     */
    @ApiModelProperty(value = "销方地址")
    private String sellerAddress;

    /**
     *销方开户银行
     */
    @ApiModelProperty(value = "销方开户银行")
    private String sellerBank;

    /**
     *收款人
     */
    @ApiModelProperty(value = "收款人")
    private String payee;

    /**
     *开票员
     */
    @ApiModelProperty(value = "开票员")
    private String clerker;

    /**
     *复核人
     */
    @ApiModelProperty(value = "复核人")
    private String checker;

    /**
     *备注
     */
    @ApiModelProperty(value = "备注")
    private String remark;

    /**
     *成品油标志:
     * 0:非成品油;
     * 1:成品油;
     */
    @ApiModelProperty(value = "成品油标志")
    private Integer productOilFlag;

    /**
     *0：非机动车。1：机动车
     */
    @ApiModelProperty(value = "0：非机动车。1：机动车")
    private Integer vehicleFlag;

    /**
     *清单标志：
     * 0：非清单；
     * 1：清单；
     */
    @ApiModelProperty(value = "清单标志")
    private Integer listFlag;

    /**
     *清单项目名称
     */
    @ApiModelProperty(value = "清单项目名称")
    private String listGoodsName;

    /**
     *分机号
     */
    @ApiModelProperty(value = "分机号")
    private Integer extensionNum;

    /**
     *税控设备号（机器编码）
     */
    @ApiModelProperty(value = "税控设备号（机器编码）")
    private String machineNumber;



    /**
     *销方银行账号
     */
    @ApiModelProperty(value = "销方银行账号")
    private String sellerAccount;

    /**
     *发票种类，p:电子增值税普通发票，c:增值税普通发票(纸票)，s:增值税专用发票，e:收购发票(电子)，f:收购发票(纸质)，
     * r:增值税普通发票(卷式)，b:增值税电子专用发票，j:机动车发票，u：二手车发票，bs:全电专票(电子),pc:全电普票(电子)，
     * es:全电专票(纸质)；ec:全电普票(纸质) 仅开票成功会返回
     */
    @ApiModelProperty(value = "发票种类")
    private String invoiceLine;

    /**
     *企业开票时传入自定义字段1
     */
    @ApiModelProperty(value = "企业开票时传入自定义字段1")
    private String columnFirst;

    /**
     *企业开票时传入自定义字段2
     */
    @ApiModelProperty(value = "企业开票时传入自定义字段2")
    private String columnSecond;

    /**
     *企业开票时传入自定义字段3
     */
    @ApiModelProperty(value = "企业开票时传入自定义字段3")
    private String columnThree;



    /**
     *快递单号
     */
    @ApiModelProperty(value = "快递单号")
    private String mailNo;

    /**
     *业务类型
     */
    @ApiModelProperty(value = "业务类型")
    private String businessType;

    /**
     *关联状态(0:未关联 1:关联中 2:关联成功 3:部分关联 4:关联失败)
     */
    @ApiModelProperty(value = "关联状态")
    private String relatedState;

    /**
     *购买方经办人姓名，全电特有字段
     */
    @ApiModelProperty(value = "购买方经办人姓名，全电特有字段")
    private String buyerManagerName;

    /**
     *红字确认单流水号
     */
    @ApiModelProperty(value = "红字确认单流水号")
    private String billId;

    /**
     *红字确认单编号
     */
    @ApiModelProperty(value = "红字确认单编号")
    private String billConfirmNo;

    /**
     *红字确认单UUID
     */
    @ApiModelProperty(value = "红字确认单UUID")
    private String billUuid;

    /**
     *特定要素：0普通发票（默认）01成品油 03机动车 04货物运输发票33二手车反向开具35 矿产品发票
     */
    @ApiModelProperty(value = "特定要素")
    private String specificFactor;

    /**
     *全电纸票作废原因 1:销货退回;2:开票有误;3:服务中止;4:其他（已作废状态下的发票，且票为全电纸票且回传其他信息时返回）
     */
    @ApiModelProperty(value = "全电纸票作废原因")
    private Integer invalidReason;

    /**
     *其他作废原因详情（作废原因为4 且回传其他信息时返回）
     */
    @ApiModelProperty(value = "其他作废原因详情")
    private String specificReason;

    /**
     * 开票结果主动查询时使用
     *开票状态(0:开票中1:开票完成2:开票失败3:发票生成
     */
    @ApiModelProperty(value = "开票状态(0:开票中1:开票完成2:开票失败3:发票生成")
    private Integer status;

    /**
     * 开票结果主动查询时使用
     * 发票作废状态:  0 未提交 , 1  作废成功 , 2 作废失败 , 3 已提交(作废中)。默认值0
     */
    @ApiModelProperty(value = "发票作废状态:  0 未提交 , 1  作废成功 , 2 作废失败 , 3 已提交(作废中)。默认值0")
    private Integer invalidState;

    /**
     * 明细
     */
    @ApiModelProperty(value = "明细")
    private List<OpenInvoiceDetails> detail;

    /**
     * 冲红原因
     * 1开票有误
     * 2销货退回
     * 3服务中止
     * 4销售折让
     */
    @ApiModelProperty(value = "冲红原因")
    private String redReason;

    /**
     * xmlUrl
     */
    @ApiModelProperty(value = "xmlUrl")
    private String xmlUrl;

    /**
     * 自动补偿id
     */
    @ApiModelProperty(value = "自动补偿id")
    private Long compensateId;

    /**
     * 0:否 1:是	是否冲红标识
     */
    @ApiModelProperty(value = "是否冲红标识")
    private Integer isRedInvoice;

    /**
     * 每千克煤炭发热量（千卡）
     */
    @ApiModelProperty(value = "每千克煤炭发热量")
    private String mtrl;
    /**
     * 干基全硫（%）
     */
    @ApiModelProperty(value = "干基全硫（%）")
    private String mtql;
    /**
     * 干燥无灰基挥发分（%）
     */
    @ApiModelProperty(value = "干燥无灰基挥发分（%）")
    private String mthf;

}
